/*
 * =====================================================================================
 *
 *       Filename:  listAllWord.cpp
 *
 *    Description:
 *
 *        Version:  1.0
 *        Created:  2017年04月14日 12时04分32秒
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  Crane (), wanghe@galaxyeye-tech.com
 *   Organization:  Galaxy-eye
 *
 * =====================================================================================
 */

Dict  dict;       // 词典类: 内部维护所有词汇, 和基本的词汇操作等...

SegSaver  g_segSaver;       // 保存所有的分词方案


// 供外部: 列出sentence中所有可能的分词方案
listAllSeg(string  sentence)
{
    string   emptySeg;
    listSeg(sentence, emptySeg);
}

// 内部实现
listSeg(string sentence,  string  partSeg)
{
    // 如果sentence已经没有字符了: 传入的partSeg 就是一个完整的分词方案
    if( sentence.end() )
    {
        g_segSaver.push(partSeg);
    }

    wordBegin = 0;

    // 循环获取词汇进行分析
    for wordEnd = (from 0 to  MaxWordLength)      // 从0 到最长词汇长度: 假设为5进行分析
    {
        // 先获取一个词, 未必是一个存在于字典中的合法词汇, 叫做伪词好了
        tmpWord = sentence[wordBegin:wordEnd];

        if( dict.isWord(tmpWord) )
        {
            string  lf_partSeg = partSeg;

            lf_partSeg.append(tmpWord);
            listSeg(sentence.remain(worEnd), lf_partSeg);       // 对剩下的句子, 继续进行分词
        }
    }
}

